package file

import (
	"crypto/sha256"
	"encoding/hex"
	"io"
	"os"
)

// CalculateFileHash 计算文件的SHA256哈希值，并返回哈希字符串和错误
func CalculateFileHash(filePath string) (string, error) {
	// 打开文件
	file, err := os.Open(filePath)
	if err != nil {
		return "", err
	}
	defer file.Close()

	// 创建哈希对象
	hash := sha256.New()

	//// 创建Scanner对象，并设置缓冲区大小为4096字节
	//scanner := bufio.NewScanner(file)
	//buf := make([]byte, 0, 4096)
	//scanner.Buffer(buf, bufio.MaxScanTokenSize)
	//
	//// 逐行或逐块读取文件内容
	//for scanner.Scan() {
	//	line := scanner.Bytes()
	//	// 将每行或每块内容传入哈希对象
	//	hash.Write(line)
	//}
	//
	//// 检查Scanner是否发生错误
	//if err := scanner.Err(); err != nil {
	//	return "", err
	//}

	_, err = io.Copy(hash, file)
	if err != nil {
		return "", err
	}

	// 计算哈希值
	hashInBytes := hash.Sum(nil)
	hashInString := hex.EncodeToString(hashInBytes)

	return hashInString, nil
}
